'use strict';
module.exports = app => {
  const { STRING, BIGINT, BOOLEAN, TEXT } = app.Sequelize;

  const User = app.model.define('user', {
    user_name: {
      type: STRING, // VARCHAR(255)
      // allowNull: false, // allowNull 默认为 true 不能为空设置为 false ,
      unique: false, // 唯一的 // unique 属性是创建唯一约束的简写.
      omment: '用户名', // 注释
    },
    nickname: {
      type: STRING, // VARCHAR(255)
      // allowNull: false, // allowNull 默认为 true 不能为空设置为 false ,
      // unique: true, // 唯一的 // unique 属性是创建唯一约束的简写.
      omment: '用户名', // 注释
    },
    email: {
      type: STRING,
      unique: true,
      omment: '邮箱，唯一',
    },
    mobile: {
      type: BIGINT,
      // allowNull: false,
      unique: true,
      omment: '手机号码，唯一',
    },
    password: {
      type: STRING,
      allowNull: false,
      defaultValue: 'www.i6i8.cn',
      comment: '密码',
    },
    paypassword: {
      type: STRING,
      allowNull: false,
      defaultValue: '000000',
      comment: '支付密码',
    },
    gender: {
      type: STRING,
      allowNull: false,
      defaultValue: '男',
      comment: '性别',
    },
    age: {
      type: BIGINT,
      defaultValue: '18',
      comment: '年龄',
    },
    birthday: {
      type: STRING,
      defaultValue: '1999-06-23',
      comment: '生日',
    },
    city: {
      type: STRING,
      defaultValue: '长沙',
      comment: '城市',
    },
    introduce: {
      type: STRING,
      defaultValue: '',
      comment: '个人介绍',
    },
    profession: {
      type: STRING,
      defaultValue: '',
      comment: '职业',
    },
    school: {
      type: STRING,
      defaultValue: '',
      comment: '学校',
    },
    avatar: {
      type: TEXT,
      allowNull: false,
      defaultValue: 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png', // 设置默认值
      comment: '头像',
    },
    background_image: {
      type: TEXT,
      defaultValue: '',
      comment: '背景图',
    },
    is_admin: {
      type: BOOLEAN, // 布尔
      allowNull: false,
      defaultValue: 0, // 设置默认值
      comment: '是否为管理 1 true ｜ 0 false',
    },
    status: {
      type: BOOLEAN, // 布尔
      allowNull: false,
      defaultValue: 1, // 设置默认值
      comment: '是否启用 1 true ｜ 0 false',
    },

  },
  {
    defaultScope: {
      // attributes: { exclude: [ 'password' ] },
    },
    // scopes: {
    //   withPassword: {
    //     attributes: {},
    //   },
    // },
  }
  );

  User.associate = () => {


    // 因为查找user的时候,想要知道这个user归属于哪一个role,所以
    // app.model.User.belongsTo(app.model.Role, { as: 'role' });
    // 该用户发表了哪些文章
    app.model.User.hasMany(app.model.Article, { as: 'articles', foreignKey: 'user_id' });
    // 该用户拥有哪些角色
    app.model.User.belongsToMany(app.model.Role, {
      as: 'roles',
      through: app.model.UserRole,
      foreignKey: 'user_id',
      otherKey: 'role_id',
    });
  };

  return User;
};
